Bug 530146 - Setting non-string tooltip with
authorKristian Rietveld <kris@imendio.com>
Fri, 30 May 2008 22:59:13 +0000 (22:59 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Fri, 30 May 2008 22:59:13 +0000 (22:59 +0000)
2008-05-31  Kristian Rietveld  <kris@imendio.com>

Bug 530146 - Setting non-string tooltip with
gtk_tree_view_set_tooltip_column() segfaults

* gtk/gtktreeview.c (gtk_tree_view_set_tooltip_query_cb): use
gtk_tree_model_get_value() and explicitly transform the value to a
string before setting it as tooltip.

svn path=/trunk/; revision=20261

ChangeLog
gtk/gtktreeview.c

index b52d43c4e0228add92ae1c6fdd15b6d720fc14a4..789beea884335aba9dd51829e8f53e988516d7ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-05-31  Kristian Rietveld  <kris@imendio.com>
+
+       Bug 530146 - Setting non-string tooltip with
+       gtk_tree_view_set_tooltip_column() segfaults
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_tooltip_query_cb): use
+       gtk_tree_model_get_value() and explicitly transform the value to a
+       string before setting it as tooltip.
+
 2008-05-30  Tor Lillqvist  <tml@novell.com>
 
        * modules/engines/ms-windows/msw_style.h
index 455a4fa3a7f6dc6cb5f42cd6e894509c7d45786e..6bebb8cf678ef381be801876c637290b16225fa1 100644 (file)
@@ -15514,7 +15514,8 @@ gtk_tree_view_set_tooltip_query_cb (GtkWidget  *widget,
                                    GtkTooltip *tooltip,
                                    gpointer    data)
 {
-  gchar *str;
+  GValue value = { 0, };
+  GValue transformed = { 0, };
   GtkTreeIter iter;
   GtkTreePath *path;
   GtkTreeModel *model;
@@ -15526,19 +15527,34 @@ gtk_tree_view_set_tooltip_query_cb (GtkWidget  *widget,
                                          &model, &path, &iter))
     return FALSE;
 
-  gtk_tree_model_get (model, &iter, tree_view->priv->tooltip_column, &str, -1);
+  gtk_tree_model_get_value (model, &iter,
+                            tree_view->priv->tooltip_column, &value);
 
-  if (!str)
+  g_value_init (&transformed, G_TYPE_STRING);
+
+  if (!g_value_transform (&value, &transformed))
+    {
+      g_value_unset (&value);
+      gtk_tree_path_free (path);
+
+      return FALSE;
+    }
+
+  g_value_unset (&value);
+
+  if (!g_value_get_string (&transformed))
     {
+      g_value_unset (&transformed);
       gtk_tree_path_free (path);
+
       return FALSE;
     }
 
-  gtk_tooltip_set_markup (tooltip, str);
+  gtk_tooltip_set_markup (tooltip, g_value_get_string (&transformed));
   gtk_tree_view_set_tooltip_row (tree_view, tooltip, path);
 
   gtk_tree_path_free (path);
-  g_free (str);
+  g_value_unset (&transformed);
 
   return TRUE;
 }